#ifndef __CONJUNTO_DE_DESCRIPTORES_H__
#define __CONJUNTO_DE_DESCRIPTORES_H__

#include "Lista.h"
#include "descriptor_alumno.h"
#include "iterador_conjunto_de_descriptores.h"

class ConjuntoDeDescriptores {

private:

	Lista<DescriptorAlumno> *descriptores;

public:

	/**
	 * Postcondicones: El conjunto queda creado sin descriptores.
	 */
	ConjuntoDeDescriptores();

	/**
	 * Postcondiciones: Se elimina el conjunto liberando todos los recursos utilizados.
	 */
	~ConjuntoDeDescriptores();

	/**
	 * Postcondiciones: El conjunto queda creaco con los mismos elementos
	 *                  que el utilizado para su construccion.
	 */
	ConjuntoDeDescriptores(const ConjuntoDeDescriptores&);

	/**
	 * Postcondiciones: Se eliminan los elementos del conjunto y se asignan los del
	 *                  elemento indicado.
	 */
	ConjuntoDeDescriptores& operator=(const ConjuntoDeDescriptores&);

	/**
	 * Precondiciones: El descriptor debe ser valido.
	 * Postcondiciones: Se agrega el descriptor al conjunto.
	 *                  Si el descriptor ya estaba en el conjunto este ultimo
	 *                  no se modifica.
	 */
	void agregarDescriptor(DescriptorAlumno);

	/**
	 * Precondiciones: El descriptor debe ser valido.
	 * Postcondiciones: Se elimina el descriptor del conjunto.
	 *                  Si el descriptor no estaba presente en el conjunto este
	 *                  ultimo no se modifica.
	 */
	void quitarDescriptor(DescriptorAlumno);

	/**
	 * Postcondiciones: Retorna un IteradorConjuntoDeDescriptores apuntando al primer
	 *                  elemento del conjunto.
	 */
	IteradorConjuntoDeDescriptores iterador();

	/**
	 * Postcondiciones: Retorna el numero de elementos en el conjunto.
	 */
	int tamanio();

};

#endif /* __CONJUNTO_DE_DESCRIPTORES_H__ */
